"""
一段文字中有(),[],{},编写一个接口程序去
	判断括号是否匹配正确
"""

from 栈的链式栈3 import *

text = "Lists (known as arrays [in] other languages) " \
       "are one of the compound data types that Python understands. Lists can be indexed, " \
       "({sliced} and {manipulated [with] other built-in functions}"

# 验证条件提取定义好
parens = "()[]{}"  # 特殊处理的字符集
left_parens = '([{'  # 入栈字符集
# 验证匹配关系
opposite = {'}': '{', ']': '[', ')': '('}

ls = LStack()  # 存储括号的栈


# 编写生成器,用来遍历字符串,不断的提供括号及其位置
def parent(text_):
	# i 遍历字符串的索引位置
	i, text_len = 0, len(text_)

	# 开始循环遍历字符串
	while True:
		while i < text_len and text_[i] not in parens:
			i += 1

		# 到字符串结尾了
		if i >= text_len:
			return
		else:
			yield text_[i], i
			i += 1


# 功能函数判断提供的括号是否匹配
def ver():
	"""功能函数判断提供的括号是否匹配 """
	for pr, i in parent(text):
		if pr in left_parens:
			ls.push((pr, i))  # 左括号入栈
		elif ls.is_empty() or ls.pop()[0] != opposite[pr]:
			print("没有匹配的括号,在%d下标这个位置, 发现%s这个不匹配!" % (i, pr))
			break
	else:
		if ls.is_empty():
			print("所有括号都匹配!")
		else:
			# 左括号多了
			d = ls.pop()
			print("没有匹配的括号,在%d这个位置, 发现%s这个不匹配!" % (d[1], d[0]))


for i, j in parent(text):
	print(i, j)
# 逻辑验证
ver()
